//
//  UITextView+Emoticon.swift
//  表情键盘
//
//  Created by 雷路荣 on 15/12/29.
//  Copyright © 2015年 leilurong. All rights reserved.
//

import UIKit

extension UITextView {
    /// 获取textView中带表情图片的文本
    func emoticonText() -> String {
        // 拼接之后的文本内容
        var textM = ""
        // 表情图片会分段保存在textView.attributedText里面,需要分段获取,拼接起来
        //print("textView的文本:\(textView.attributedText)")
        // 遍历属性文本的每一段
        // attrName: 要遍历的String     inRange: 范围
        attributedText.enumerateAttributesInRange(NSRange(location: 0, length: attributedText.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (result, range, _) -> Void in
            // 如果result 字典里面包含 NSAttachment key就是一个图片,其他情况直接截取文本
            //            print("result: \(result)")
            //            print("range: \(range)")
            //            print("--------")
            if let attachment = result["NSAttachment"] as? LRTextAttachment {
                // result 字典里面包含 NSAttachment key 就是一个图片,需要获取到附件图片的名称
                // 让附件里面带有图片的名称
                textM += attachment.chs!
            }else {
                // 文本,其他情况直接截取文本
                let text = (self.attributedText.string as NSString).substringWithRange(range)
                // 将截取的字符串拼接到textM后面
                // textM = textM + text
                textM += text
                
            }
        }
        return textM
    }
    
    
    /**
     添加表情到textView里面
     - parameter emoticon: 要添加的表情模型
     */
    func insertEmoticon(emoticon: LREmoticon) {
        // 需要添加的表情有2种
        
        // 1.添加emoji表情
        if let emoji = emoticon.emoji {
            insertText(emoji)
            
            // 不需要在判断是图片表情
            return
        }
        
        // 2.添加图片表情
        if let pngPath = emoticon.pngPath {
            // 2.1创建附件
            let attachment = LRTextAttachment()
            
            // 2.2给附件添加图片
            attachment.image = UIImage(contentsOfFile: pngPath)
            
            // 2.2.1设置附件的图片名称
            attachment.chs = emoticon.chs
            
            // 2.2.2设置图片的bounds
            let w = font!.lineHeight
            attachment.bounds = CGRect(x: 0, y: -(w * 0.2), width: w, height: w)
            
            // 2.3将附件转成可变的属性文本
            let attrText = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attachment))
            
            // 2.3.2发现在图片后面连续添加图片,图片会变小.原因是附件缺少Font属性,给附件添加Font属性
            attrText.addAttribute(NSFontAttributeName, value: font!, range: NSRange(location: 0, length: 1))
            
            // 2.4获取现有的属性文本,转成可变属性文本
            let currentAttrText = NSMutableAttributedString(attributedString: attributedText)
            
            // 2.5获取选中位置
            let selectRange = selectedRange
            
            // 2.6将图片替换到现有文本选中的位置
            currentAttrText.replaceCharactersInRange(selectRange, withAttributedString: attrText)
            
            // 2.7将替换好的属性文本赋值给textView
            attributedText = currentAttrText
            
            // 2.8设置光标位置
            selectedRange = NSRange(location: selectRange.location + 1, length: 0)
        }
    }


}
